package com.earthchen.nonetty;

import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.Charset;

/**
 * 不通过 Netty 使用 OIO 和 NIO
 * <p>
 * 仅使用了 JDK API 的应用程序的阻塞（OIO） 版本和异步（NIO）版本
 * <p>
 * 其阻塞版本的实现
 *
 * @author: EarthChen
 * @date: 2018/04/23
 */
public class PlainOioServer {

    public void serve(int port) throws IOException {
        // 将服务器绑定到指定端口
        final ServerSocket socket = new ServerSocket(port);
        try {
            for (; ; ) {
                // 接受连接
                final Socket clientSocket = socket.accept();
                System.out.println("Accepted connection from " + clientSocket);
                // 创建一个新的线程来处理该连接
                new Thread(() -> {
                    OutputStream out;
                    try {
                        out = clientSocket.getOutputStream();
                        // 将消息写给已连接的客户端
                        out.write("Hi!\r\n".getBytes(Charset.forName("UTF-8")));
                        out.flush();
                        // 关闭连接
                        clientSocket.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    } finally {
                        try {
                            clientSocket.close();
                        } catch (IOException ex) {
                            // ignore on close
                        }
                    }
                    // 关闭连接
                }).start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
